package com.dz.util;

import cn.hutool.jwt.JWTUtil;

import java.util.Map;

public class TokenUtil {
    public static final String TOKEN_SECRET = "DZ_TOKEN";
    // 生成token
    public static String getToken(int id, String username, String role) {
        Map map = Map.of(
                SYS.TOKEN_ID, id,
                SYS.TOKEN_USERNAME, username,
                SYS.TOKEN_ROLE, role);
        return JWTUtil.createToken(map, TOKEN_SECRET.getBytes());
    }

    // 验证token
    public static boolean verify(String token) {
        // 检查token是否为空
        if (token == null || token.trim().isEmpty()) {
            return false;
        }
        try {
            // 检查基本格式（JWT应该有3部分）
            String[] parts = token.split("\\.");
            if (parts.length != 3) {
                return false;
            }

            // 使用JWTUtil验证token
            return JWTUtil.verify(token, TOKEN_SECRET.getBytes());
        } catch (Exception e) {
            // 捕获所有可能的异常，包括JWTException
            return false;
        }
    }

    // 获取token中的信息
    public static Object getOption(String token, String key) {
        //return JWTUtil.parseToken(token).getPayload(key);
        if (token == null || token.trim().isEmpty()) {
            return null;
        }

        try {
            return JWTUtil.parseToken(token).getPayload(key);
        } catch (Exception e) {
            return null;
        }
    }

    // 获取角色信息
    public static String getRole(String token) {
        return (String) JWTUtil.parseToken(token).getPayload(SYS.TOKEN_ROLE);
    }

    // 获取用户ID
    public static Integer getId(String token) {
        try {
            Object idObj = JWTUtil.parseToken(token).getPayload(SYS.TOKEN_ID);
            if (idObj == null) {
                return null;
            }

            // 处理 Hutool JWT 返回的 NumberWithFormat 类型
            if (idObj instanceof Number) {
                return ((Number) idObj).intValue();
            } else if (idObj instanceof String) {
                return Integer.valueOf((String) idObj);
            } else {
                return Integer.valueOf(idObj.toString());
            }
        } catch (Exception e) {
            System.err.println("解析用户ID时出错: " + e.getMessage());
            e.printStackTrace();
            return null;
        }
    }

    // 获取用户名
    public static String getUsername(String token) {
        return (String) JWTUtil.parseToken(token).getPayload(SYS.TOKEN_USERNAME);
    }
}
